import {msgApi} from "@/api";

export default {
  msgs: [],
  _listeners: [],

  async startPoll() {
    await this._request()
    setInterval(() => {
      this._request()
    }, 5000)
  },
  async _request() {
    const res = await msgApi.poll()
    if (res.data.data) {
      // this.msgs.push(res.data.data)
      const msg = res.data.data
      this.publishMsg(msg)
    }
  },
  publishMsg(msg) {
    this.msgs.push(msg)
    this.executeMsg()
  },
  executeMsg() {
    if (this._listeners.length && this.msgs.length) {
      const msg = this.msgs[0]
      const found = this._listeners.find(listener => {
        return listener(msg)
      })

      if (found) {
        this.msgs.splice(0, 1)
      }
    }
  },
  addListener(cb) {
    this._listeners.push(cb)
    this.executeMsg()
    return () => {
      const i = this._listeners.findIndex(item => item === cb)
      this._listeners.splice(i, 1)
    }
  }
}
